﻿#ifndef MAINWIDGET_H
#define MAINWIDGET_H
#include <QWidget>
#include<QPainter>          //实现窗口重绘
#include<QNetworkRequest>   //HTTP的URL请求管理
#include<QNetworkAccessManager> //URL的上传管理
#include<QNetworkReply>     //网页回复数据触发信号类
#include<QEventLoop>        //提供一种进入和离开事件循环的方法
#include<QJsonArray>        //QJsonArray类用于封装JSON数组
#include<QJsonObject>       //QJsonObject类用于封装Json对象
#include<QJsonDocument>     //QJsonDocument提供了用于解析和生成JSON数据的类和方法。

#include<QMediaPlayer>
//#include<QMediaPlaylist>  //Qt6已经移除了这个
#include<QMediaCaptureSession>
#include<QSqlDatabase>
#include<QSqlQuery>
#include<QSqlError>
#include<QSqlRecord>
#include<QMessageBox>
#include<QTime>
#include<math.h>
#include<QMouseEvent>
#include<QAudioOutput>
#include<QNetworkCookie>
#include<QNetworkCookieJar>
#include<QMenu>
#include<QAction>
#include<QFileDialog>
#include<QStandardPaths>
static QString kugouSearchApi="http://music.163.com/api/search/get/web?";//网易云搜索
static QString kugouDownloadApi="https://music.163.com/song/media/outer/url?";//网易云播放
QT_BEGIN_NAMESPACE
namespace Ui {
class MainWidget;
}
QT_END_NAMESPACE

class MainWidget : public QWidget
{
    Q_OBJECT

public:
    MainWidget(QWidget *parent = nullptr);
    ~MainWidget();
    //ui背景
    void paintEvent(QPaintEvent *event);

signals:
    void finish(QByteArray);
    void lyricShow(QString);
private slots:
    void on_pushButton_Close_clicked();//关闭窗口
    void on_pushButton_Skin_clicked();//更换窗口皮肤
    void on_pushButton_About_clicked();//应用程序关于操作
    void on_pushButton_Seacrch_clicked();//搜索音乐
    void on_VopSlider_valueChanged(int value);//音量调节



    void on_progressSlider_valueChanged(int value);//播放进度
    void on_progressSlider_sliderPressed();
    void on_progressSlider_sliderReleased();

    void on_pushButton_Front_clicked();//上一曲
    void on_pushButton_Playpause_clicked();//播放暂停
    void on_pushButton_Next_clicked();//下一曲
    void on_pushButton_Loop_clicked();//循环播放

    //更新播放的进度条和显示时间
    void updateDuration(qint64);
    //读取网络数据的槽函数
    void netReply(QNetworkReply *);
    //显示歌词的槽函数
    void lyricTextShow(QString);
    //音乐播放
    void playSearchMusic();//双击搜索列表，播放音乐
    void playHistoryMusic();//双击历史播放列表，播放音乐

    //更换皮肤的槽函数
    void backgroundtodefault();//更换到默认背景皮肤
    void backgroundtoSetting();//更换自定义皮肤
protected:
    //音乐歌曲的下载和播放
    void downloadPlayer(int music_id);
    //访问HTTP网页
    void httpAccess(QString);
    //音乐的hash和album_id值的解析，使用JSON
    void hashJsonAnalysis(QByteArray);
    //搜索的音乐数据信息JSON解析，解析出真正的音乐文件和歌词
    QString musicJsonAnalysis(QByteArray);

private:
    Ui::MainWidget *ui;
    QNetworkRequest *request;
    QNetworkAccessManager *manager;
    QMediaPlayer *player;
    //QMediaPlaylist *playerlist;
    QSqlDatabase db;
    QAudioOutput *audioOutput;
    int num,row;
    int musicId,musicDuration,mvId;
    //更换皮肤菜单
    QMenu *menuchangeSkin;
    QString musicName,singerName,albumName;
//处理鼠标拖动窗口移动动作
private:
    QPoint m_mousePoint;
    QPoint movePoint;
    bool mousePress;//是否按下
    bool i;//判断进度条的是否按下,松开
    bool bofang=false;//播放暂停控制
    bool loop=true;//设置音乐循环
protected:
    void mouseMoveEvent(QMouseEvent *event);
    void mouseReleaseEvent(QMouseEvent *event);
    void mousePressEvent(QMouseEvent *event);
};
#endif // MAINWIDGET_H
